﻿Imports System.ComponentModel

''' <summary>
''' 共有フォルダーを表すクラスです。
''' </summary>
''' <remarks></remarks>
<DataObject()>
Public NotInheritable Class Volume
  Inherits DomainObject

#Region " プライベートフィールド "
  Private _keywords() As String
#End Region

#Region " フレンドコンストラクター "
  ''' <summary>
  ''' <see cref="DirectoryEntry"/> を指定して <see cref="Volume"/> クラスの新しいインスタンスを初期化します。
  ''' </summary>
  ''' <param name="entry"><see cref="DirectoryEntry"/>。</param>
  ''' <remarks></remarks>
  Friend Sub New(entry As DirectoryEntry)
    MyBase.New(entry)

    _keywords = entry.Properties.Item("keywords").Cast(Of String)().ToArray()
  End Sub
#End Region

#Region " パブリックプロパティ "
  ''' <summary>キーワードを取得または設定します。</summary>
  ''' <value></value>
  ''' <returns>キーワード。</returns>
  ''' <remarks></remarks>
  Public Property Keywords As String()
    Get
      Return _keywords
    End Get
    Set(value As String())
      If MyBase.IsDisposed Then
        Throw New ObjectDisposedException(Me.GetType().Name)
      End If
      MyBase.Entry.Properties.Item("keywords").Value = value
      _keywords = MyBase.Entry.Properties.Item("keywords").Cast(Of String)().ToArray()
    End Set
  End Property

  ''' <summary>UNC パスを取得または設定します。</summary>
  ''' <value></value>
  ''' <returns>UNC パス。</returns>
  ''' <remarks></remarks>
  Public Property UncPath As String
    Get
      If MyBase.IsDisposed Then
        Throw New ObjectDisposedException(Me.GetType().Name)
      End If
      Return DirectCast(MyBase.Entry.Properties.Item("uNCName").Value, String)
    End Get
    Set(value As String)
      If MyBase.IsDisposed Then
        Throw New ObjectDisposedException(Me.GetType().Name)
      End If
      MyBase.Entry.Properties.Item("uNCName").Value = value
    End Set
  End Property
#End Region

#Region " パブリックメソッド "
  ''' <summary>
  ''' 指定した名前の共有フォルダーを検索します。このメソッドはデータバインド用です。
  ''' </summary>
  ''' <param name="name">名前。</param>
  ''' <returns>共有フォルダー。</returns>
  ''' <remarks></remarks>
  <DataObjectMethod(DataObjectMethodType.Select)>
  Public Shared Function FindByName(name As String) As Volume
    Return DirectCast(DirectoryAccess.FindDirectoryObject(name, CategoryType.Volume), Volume)
  End Function

  ''' <summary>
  ''' 共有フォルダーの一覧を取得します。このメソッドはデータバインド用です。
  ''' </summary>
  ''' <returns>共有フォルダーの一覧。</returns>
  ''' <remarks></remarks>
  <DataObjectMethod(DataObjectMethodType.Select)>
  Public Shared Function GetVolumes() As IList(Of Volume)
    Return DirectoryAccess.GetVolumes()   '共有フォルダーを取得
  End Function
#End Region
End Class
